home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Include / d3dx9effect.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-28  |  37.7 KB  |  782 lines

  1.  
  2. //////////////////////////////////////////////////////////////////////////////
  3. //
  4. //  Copyright (c) Microsoft Corporation.  All rights reserved.
  5. //
  6. //  File:       d3dx9effect.h
  7. //  Content:    D3DX effect types and Shaders
  8. //
  9. //////////////////////////////////////////////////////////////////////////////
  10.  
  11. #include "d3dx9.h"
  12.  
  13. #ifndef __D3DX9EFFECT_H__
  14. #define __D3DX9EFFECT_H__
  15.  
  16.  
  17. //----------------------------------------------------------------------------
  18. // D3DXFX_DONOTSAVESTATE
  19. //   This flag is used as a parameter to ID3DXEffect::Begin().  When this flag
  20. //   is specified, device state is not saved or restored in Begin/End.
  21. // D3DXFX_DONOTSAVESHADERSTATE
  22. //   This flag is used as a parameter to ID3DXEffect::Begin().  When this flag
  23. //   is specified, shader device state is not saved or restored in Begin/End.
  24. //   This includes pixel/vertex shaders and shader constants
  25. // D3DXFX_DONOTSAVESAMPLERSTATE
  26. //   This flag is used as a parameter to ID3DXEffect::Begin(). When this flag
  27. //   is specified, sampler device state is not saved or restored in Begin/End.
  28. //----------------------------------------------------------------------------
  29.  
  30. #define D3DXFX_DONOTSAVESTATE         (1 << 0)
  31. #define D3DXFX_DONOTSAVESHADERSTATE   (1 << 1)
  32. #define D3DXFX_DONOTSAVESAMPLERSTATE  (1 << 2)
  33.  
  34.  
  35. //----------------------------------------------------------------------------
  36. // D3DX_PARAMETER_SHARED
  37. //   Indicates that the value of a parameter will be shared with all effects
  38. //   which share the same namespace.  Changing the value in one effect will
  39. //   change it in all.
  40. //
  41. // D3DX_PARAMETER_LITERAL
  42. //   Indicates that the value of this parameter can be treated as literal.
  43. //   Literal parameters can be marked when the effect is compiled, and their
  44. //   cannot be changed after the effect is compiled.  Shared parameters cannot
  45. //   be literal.
  46. //----------------------------------------------------------------------------
  47.  
  48. #define D3DX_PARAMETER_SHARED       (1 << 0)
  49. #define D3DX_PARAMETER_LITERAL      (1 << 1)
  50. #define D3DX_PARAMETER_ANNOTATION   (1 << 2)
  51.  
  52.  
  53. //----------------------------------------------------------------------------
  54. // D3DXEFFECT_DESC:
  55. //----------------------------------------------------------------------------
  56.  
  57. typedef struct _D3DXEFFECT_DESC
  58. {
  59.     LPCSTR Creator;                     // Creator string
  60.     UINT Parameters;                    // Number of parameters
  61.     UINT Techniques;                    // Number of techniques
  62.     UINT Functions;                     // Number of function entrypoints
  63.  
  64. } D3DXEFFECT_DESC;
  65.  
  66.  
  67. //----------------------------------------------------------------------------
  68. // D3DXPARAMETER_DESC:
  69. //----------------------------------------------------------------------------
  70.  
  71. typedef struct _D3DXPARAMETER_DESC
  72. {
  73.     LPCSTR Name;                        // Parameter name
  74.     LPCSTR Semantic;                    // Parameter semantic
  75.     D3DXPARAMETER_CLASS Class;          // Class
  76.     D3DXPARAMETER_TYPE Type;            // Component type
  77.     UINT Rows;                          // Number of rows
  78.     UINT Columns;                       // Number of columns
  79.     UINT Elements;                      // Number of array elements
  80.     UINT Annotations;                   // Number of annotations
  81.     UINT StructMembers;                 // Number of structure member sub-parameters
  82.     DWORD Flags;                        // D3DX_PARAMETER_* flags
  83.     UINT Bytes;                         // Parameter size, in bytes
  84.  
  85. } D3DXPARAMETER_DESC;
  86.  
  87.  
  88. //----------------------------------------------------------------------------
  89. // D3DXTECHNIQUE_DESC:
  90. //----------------------------------------------------------------------------
  91.  
  92. typedef struct _D3DXTECHNIQUE_DESC
  93. {
  94.     LPCSTR Name;                        // Technique name
  95.     UINT Passes;                        // Number of passes
  96.     UINT Annotations;                   // Number of annotations
  97.  
  98. } D3DXTECHNIQUE_DESC;
  99.  
  100.  
  101. //----------------------------------------------------------------------------
  102. // D3DXPASS_DESC:
  103. //----------------------------------------------------------------------------
  104.  
  105. typedef struct _D3DXPASS_DESC
  106. {
  107.     LPCSTR Name;                        // Pass name
  108.     UINT Annotations;                   // Number of annotations
  109.  
  110.     CONST DWORD *pVertexShaderFunction; // Vertex shader function
  111.     CONST DWORD *pPixelShaderFunction;  // Pixel shader function
  112.  
  113. } D3DXPASS_DESC;
  114.  
  115.  
  116. //----------------------------------------------------------------------------
  117. // D3DXFUNCTION_DESC:
  118. //----------------------------------------------------------------------------
  119.  
  120. typedef struct _D3DXFUNCTION_DESC
  121. {
  122.     LPCSTR Name;                        // Function name
  123.     UINT Annotations;                   // Number of annotations
  124.  
  125. } D3DXFUNCTION_DESC;
  126.  
  127.  
  128.  
  129. //////////////////////////////////////////////////////////////////////////////
  130. // ID3DXEffectPool ///////////////////////////////////////////////////////////
  131. //////////////////////////////////////////////////////////////////////////////
  132.  
  133. typedef interface ID3DXEffectPool ID3DXEffectPool;
  134. typedef interface ID3DXEffectPool *LPD3DXEFFECTPOOL;
  135.  
  136. // {9537AB04-3250-412e-8213-FCD2F8677933}
  137. DEFINE_GUID(IID_ID3DXEffectPool, 
  138. 0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);
  139.  
  140.  
  141. #undef INTERFACE
  142. #define INTERFACE ID3DXEffectPool
  143.  
  144. DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown)
  145. {
  146.     // IUnknown
  147.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  148.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  149.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  150.  
  151.     // No public methods
  152. };
  153.  
  154.  
  155. //////////////////////////////////////////////////////////////////////////////
  156. // ID3DXBaseEffect ///////////////////////////////////////////////////////////
  157. //////////////////////////////////////////////////////////////////////////////
  158.  
  159. typedef interface ID3DXBaseEffect ID3DXBaseEffect;
  160. typedef interface ID3DXBaseEffect *LPD3DXBASEEFFECT;
  161.  
  162. // {3B7A6FFB-3A69-46d7-BC01-A6B2AD4C2BB0}
  163. DEFINE_GUID(IID_ID3DXBaseEffect, 
  164. 0x3b7a6ffb, 0x3a69, 0x46d7, 0xbc, 0x1, 0xa6, 0xb2, 0xad, 0x4c, 0x2b, 0xb0);
  165.  
  166.  
  167. #undef INTERFACE
  168. #define INTERFACE ID3DXBaseEffect
  169.  
  170. DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown)
  171. {
  172.     // IUnknown
  173.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  174.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  175.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  176.  
  177.     // Descs
  178.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  179.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  180.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  181.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  182.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  183.  
  184.     // Handle operations
  185.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  186.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  187.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  188.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  189.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  190.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  191.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  192.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  193.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
  194.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
  195.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  196.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  197.  
  198.     // Get/Set Parameters
  199.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  200.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  201.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  202.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  203.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  204.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  205.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  206.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  207.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  208.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  209.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  210.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  211.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  212.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  213.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  214.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  215.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  216.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  217.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  218.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  219.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  220.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  221.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  222.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  223.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  224.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  225.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  226.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  227.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  228.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  229.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  230.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  231.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  232.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  233.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  234.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  235.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  236.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  237.  
  238.     //Set Range of an Array to pass to device
  239.     //Useful for sending only a subrange of an array down to the device
  240.     STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; 
  241.  
  242. };
  243.  
  244.  
  245. //----------------------------------------------------------------------------
  246. // ID3DXEffectStateManager:
  247. // ------------------------
  248. // This is a user implemented interface that can be used to manage device 
  249. // state changes made by an Effect.
  250. //----------------------------------------------------------------------------
  251.  
  252. typedef interface ID3DXEffectStateManager ID3DXEffectStateManager;
  253. typedef interface ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER;
  254.  
  255. // {79AAB587-6DBC-4fa7-82DE-37FA1781C5CE}
  256. DEFINE_GUID(IID_ID3DXEffectStateManager, 
  257. 0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce);
  258.  
  259. #undef INTERFACE
  260. #define INTERFACE ID3DXEffectStateManager
  261.  
  262. DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown)
  263. {
  264.     // The user must correctly implement QueryInterface, AddRef, and Release.
  265.  
  266.     // IUnknown
  267.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  268.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  269.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  270.  
  271.     // The following methods are called by the Effect when it wants to make 
  272.     // the corresponding device call.  Note that:
  273.     // 1. Users manage the state and are therefore responsible for making the 
  274.     //    the corresponding device calls themselves inside their callbacks.  
  275.     // 2. Effects pay attention to the return values of the callbacks, and so 
  276.     //    users must pay attention to what they return in their callbacks.
  277.  
  278.     STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix) PURE;
  279.     STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9 *pMaterial) PURE;
  280.     STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9 *pLight) PURE;
  281.     STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;
  282.     STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;
  283.     STDMETHOD(SetTexture)(THIS_ DWORD Stage, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  284.     STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;
  285.     STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;
  286.     STDMETHOD(SetNPatchMode)(THIS_ FLOAT NumSegments) PURE;
  287.     STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;
  288.     STDMETHOD(SetVertexShader)(THIS_ LPDIRECT3DVERTEXSHADER9 pShader) PURE;
  289.     STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE;
  290.     STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE;
  291.     STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE;
  292.     STDMETHOD(SetPixelShader)(THIS_ LPDIRECT3DPIXELSHADER9 pShader) PURE;
  293.     STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE;
  294.     STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE;
  295.     STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE;
  296. };
  297.  
  298.  
  299. //////////////////////////////////////////////////////////////////////////////
  300. // ID3DXEffect ///////////////////////////////////////////////////////////////
  301. //////////////////////////////////////////////////////////////////////////////
  302.  
  303. typedef interface ID3DXEffect ID3DXEffect;
  304. typedef interface ID3DXEffect *LPD3DXEFFECT;
  305.  
  306. // {0F0DCC9F-6152-4117-A933-FFAC29C43AA4}
  307. DEFINE_GUID(IID_ID3DXEffect, 
  308. 0xf0dcc9f, 0x6152, 0x4117, 0xa9, 0x33, 0xff, 0xac, 0x29, 0xc4, 0x3a, 0xa4);
  309.  
  310. #undef INTERFACE
  311. #define INTERFACE ID3DXEffect
  312.  
  313. DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect)
  314. {
  315.     // ID3DXBaseEffect
  316.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  317.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  318.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  319.  
  320.     // Descs
  321.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  322.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  323.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  324.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  325.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  326.  
  327.     // Handle operations
  328.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  329.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  330.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  331.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  332.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  333.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  334.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  335.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  336.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
  337.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
  338.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  339.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  340.  
  341.     // Get/Set Parameters
  342.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  343.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  344.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  345.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  346.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  347.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  348.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  349.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  350.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  351.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  352.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  353.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  354.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  355.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  356.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  357.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  358.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  359.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  360.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  361.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  362.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  363.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  364.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  365.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  366.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  367.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  368.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  369.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  370.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  371.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  372.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  373.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  374.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  375.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  376.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  377.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  378.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  379.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  380.  
  381.     //Set Range of an Array to pass to device
  382.     //Usefull for sending only a subrange of an array down to the device
  383.     STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; 
  384.     // ID3DXBaseEffect
  385.     
  386.     
  387.     // Pool
  388.     STDMETHOD(GetPool)(THIS_ LPD3DXEFFECTPOOL* ppPool) PURE;
  389.  
  390.     // Selecting and setting a technique
  391.     STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
  392.     STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE;
  393.     STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE hTechnique) PURE;
  394.     STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) PURE;
  395.     STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE hParameter, D3DXHANDLE hTechnique) PURE;
  396.  
  397.     // Using current technique
  398.     // Begin           starts active technique
  399.     // BeginPass       begins a pass
  400.     // CommitChanges   updates changes to any set calls in the pass. This should be called before
  401.     //                 any DrawPrimitive call to d3d
  402.     // EndPass         ends a pass
  403.     // End             ends active technique
  404.     STDMETHOD(Begin)(THIS_ UINT *pPasses, DWORD Flags) PURE;
  405.     STDMETHOD(BeginPass)(THIS_ UINT Pass) PURE;
  406.     STDMETHOD(CommitChanges)(THIS) PURE;
  407.     STDMETHOD(EndPass)(THIS) PURE;
  408.     STDMETHOD(End)(THIS) PURE;
  409.  
  410.     // Managing D3D Device
  411.     STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE;
  412.     STDMETHOD(OnLostDevice)(THIS) PURE;
  413.     STDMETHOD(OnResetDevice)(THIS) PURE;
  414.  
  415.     // Logging device calls
  416.     STDMETHOD(SetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER pManager) PURE;
  417.     STDMETHOD(GetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER *ppManager) PURE;
  418.  
  419.     // Parameter blocks
  420.     STDMETHOD(BeginParameterBlock)(THIS) PURE;
  421.     STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE;
  422.     STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE hParameterBlock) PURE;
  423.  
  424.     // Cloning
  425.     STDMETHOD(CloneEffect)(THIS_ LPDIRECT3DDEVICE9 pDevice, LPD3DXEFFECT* ppEffect) PURE;
  426. };
  427.  
  428.  
  429. //////////////////////////////////////////////////////////////////////////////
  430. // ID3DXEffectCompiler ///////////////////////////////////////////////////////
  431. //////////////////////////////////////////////////////////////////////////////
  432.  
  433. typedef interface ID3DXEffectCompiler ID3DXEffectCompiler;
  434. typedef interface ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER;
  435.  
  436. // {15A709EB-5A8E-40a0-86A9-0C024124339B}
  437. DEFINE_GUID(IID_ID3DXEffectCompiler, 
  438. 0x15a709eb, 0x5a8e, 0x40a0, 0x86, 0xa9, 0xc, 0x2, 0x41, 0x24, 0x33, 0x9b);
  439.  
  440.  
  441. #undef INTERFACE
  442. #define INTERFACE ID3DXEffectCompiler
  443.  
  444. DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect)
  445. {
  446.     // ID3DXBaseEffect
  447.     STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
  448.     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
  449.     STDMETHOD_(ULONG, Release)(THIS) PURE;
  450.  
  451.     // Descs
  452.     STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE;
  453.     STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE;
  454.     STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE;
  455.     STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE;
  456.     STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE;
  457.  
  458.     // Handle operations
  459.     STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  460.     STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE;
  461.     STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE;
  462.     STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE;
  463.     STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE;
  464.     STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE;
  465.     STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE;
  466.     STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE;
  467.     STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE;
  468.     STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE;
  469.     STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE;
  470.     STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE;
  471.  
  472.     // Get/Set Parameters
  473.     STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE;
  474.     STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE;
  475.     STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE;
  476.     STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE;
  477.     STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE;
  478.     STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE;
  479.     STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE;
  480.     STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE;
  481.     STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE;
  482.     STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE;
  483.     STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE;
  484.     STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE;
  485.     STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE;
  486.     STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE;
  487.     STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE;
  488.     STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE;
  489.     STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE;
  490.     STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE;
  491.     STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  492.     STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  493.     STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  494.     STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  495.     STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  496.     STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  497.     STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE;
  498.     STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE;
  499.     STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE;
  500.     STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE;
  501.     STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE;
  502.     STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE;
  503.     STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE;
  504.     STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE;
  505.     STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE;
  506.     STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE;
  507.     STDMETHOD(SetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 pPShader) PURE;
  508.     STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE;
  509.     STDMETHOD(SetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 pVShader) PURE;
  510.     STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE;
  511.     
  512.     //Set Range of an Array to pass to device
  513.     //Usefull for sending only a subrange of an array down to the device
  514.     STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; 
  515.     // ID3DXBaseEffect
  516.  
  517.     // Parameter sharing, specialization, and information
  518.     STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL Literal) PURE;
  519.     STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL *pLiteral) PURE;
  520.  
  521.     // Compilation
  522.     STDMETHOD(CompileEffect)(THIS_ DWORD Flags,
  523.         LPD3DXBUFFER* ppEffect, LPD3DXBUFFER* ppErrorMsgs) PURE;
  524.  
  525.     STDMETHOD(CompileShader)(THIS_ D3DXHANDLE hFunction, LPCSTR pTarget, DWORD Flags,
  526.         LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable) PURE;
  527. };
  528.  
  529.  
  530. //////////////////////////////////////////////////////////////////////////////
  531. // APIs //////////////////////////////////////////////////////////////////////
  532. //////////////////////////////////////////////////////////////////////////////
  533.  
  534.  
  535. #ifdef __cplusplus
  536. extern "C" {
  537. #endif //__cplusplus
  538.  
  539. //----------------------------------------------------------------------------
  540. // D3DXCreateEffectPool:
  541. // ---------------------
  542. // Creates an effect pool.  Pools are used for sharing parameters between
  543. // multiple effects.  For all effects within a pool, shared parameters of the
  544. // same name all share the same value.
  545. //
  546. // Parameters:
  547. //  ppPool
  548. //      Returns the created pool.
  549. //----------------------------------------------------------------------------
  550.  
  551. HRESULT WINAPI
  552.     D3DXCreateEffectPool(
  553.         LPD3DXEFFECTPOOL*               ppPool);
  554.  
  555.  
  556. //----------------------------------------------------------------------------
  557. // D3DXCreateEffect:
  558. // -----------------
  559. // Creates an effect from an ascii or binary effect description.
  560. //
  561. // Parameters:
  562. //  pDevice
  563. //      Pointer of the device on which to create the effect
  564. //  pSrcFile
  565. //      Name of the file containing the effect description
  566. //  hSrcModule
  567. //      Module handle. if NULL, current module will be used.
  568. //  pSrcResource
  569. //      Resource name in module
  570. //  pSrcData
  571. //      Pointer to effect description
  572. //  SrcDataSize
  573. //      Size of the effect description in bytes
  574. //  pDefines
  575. //      Optional NULL-terminated array of preprocessor macro definitions.
  576. //  pInclude
  577. //      Optional interface pointer to use for handling #include directives.
  578. //      If this parameter is NULL, #includes will be honored when compiling
  579. //      from file, and will error when compiling from resource or memory.
  580. //  pPool
  581. //      Pointer to ID3DXEffectPool object to use for shared parameters.
  582. //      If NULL, no parameters will be shared.
  583. //  ppEffect
  584. //      Returns a buffer containing created effect.
  585. //  ppCompilationErrors
  586. //      Returns a buffer containing any error messages which occurred during
  587. //      compile.  Or NULL if you do not care about the error messages.
  588. //
  589. //----------------------------------------------------------------------------
  590.  
  591. HRESULT WINAPI
  592.     D3DXCreateEffectFromFileA(
  593.         LPDIRECT3DDEVICE9               pDevice,
  594.         LPCSTR                          pSrcFile,
  595.         CONST D3DXMACRO*                pDefines,
  596.         LPD3DXINCLUDE                   pInclude,
  597.         DWORD                           Flags,
  598.         LPD3DXEFFECTPOOL                pPool,
  599.         LPD3DXEFFECT*                   ppEffect,
  600.         LPD3DXBUFFER*                   ppCompilationErrors);
  601.  
  602. HRESULT WINAPI
  603.     D3DXCreateEffectFromFileW(
  604.         LPDIRECT3DDEVICE9               pDevice,
  605.         LPCWSTR                         pSrcFile,
  606.         CONST D3DXMACRO*                pDefines,
  607.         LPD3DXINCLUDE                   pInclude,
  608.         DWORD                           Flags,
  609.         LPD3DXEFFECTPOOL                pPool,
  610.         LPD3DXEFFECT*                   ppEffect,
  611.         LPD3DXBUFFER*                   ppCompilationErrors);
  612.  
  613. #ifdef UNICODE
  614. #define D3DXCreateEffectFromFile D3DXCreateEffectFromFileW
  615. #else
  616. #define D3DXCreateEffectFromFile D3DXCreateEffectFromFileA
  617. #endif
  618.  
  619.  
  620. HRESULT WINAPI
  621.     D3DXCreateEffectFromResourceA(
  622.         LPDIRECT3DDEVICE9               pDevice,
  623.         HMODULE                         hSrcModule,
  624.         LPCSTR                          pSrcResource,
  625.         CONST D3DXMACRO*                pDefines,
  626.         LPD3DXINCLUDE                   pInclude,
  627.         DWORD                           Flags,
  628.         LPD3DXEFFECTPOOL                pPool,
  629.         LPD3DXEFFECT*                   ppEffect,
  630.         LPD3DXBUFFER*                   ppCompilationErrors);
  631.  
  632. HRESULT WINAPI
  633.     D3DXCreateEffectFromResourceW(
  634.         LPDIRECT3DDEVICE9               pDevice,
  635.         HMODULE                         hSrcModule,
  636.         LPCWSTR                         pSrcResource,
  637.         CONST D3DXMACRO*                pDefines,
  638.         LPD3DXINCLUDE                   pInclude,
  639.         DWORD                           Flags,
  640.         LPD3DXEFFECTPOOL                pPool,
  641.         LPD3DXEFFECT*                   ppEffect,
  642.         LPD3DXBUFFER*                   ppCompilationErrors);
  643.  
  644. #ifdef UNICODE
  645. #define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceW
  646. #else
  647. #define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceA
  648. #endif
  649.  
  650.  
  651. HRESULT WINAPI
  652.     D3DXCreateEffect(
  653.         LPDIRECT3DDEVICE9               pDevice,
  654.         LPCVOID                         pSrcData,
  655.         UINT                            SrcDataLen,
  656.         CONST D3DXMACRO*                pDefines,
  657.         LPD3DXINCLUDE                   pInclude,
  658.         DWORD                           Flags,
  659.         LPD3DXEFFECTPOOL                pPool,
  660.         LPD3DXEFFECT*                   ppEffect,
  661.         LPD3DXBUFFER*                   ppCompilationErrors);
  662.  
  663.  
  664.  
  665. //----------------------------------------------------------------------------
  666. // D3DXCreateEffectCompiler:
  667. // -------------------------
  668. // Creates an effect from an ascii or binary effect description.
  669. //
  670. // Parameters:
  671. //  pSrcFile
  672. //      Name of the file containing the effect description
  673. //  hSrcModule
  674. //      Module handle. if NULL, current module will be used.
  675. //  pSrcResource
  676. //      Resource name in module
  677. //  pSrcData
  678. //      Pointer to effect description
  679. //  SrcDataSize
  680. //      Size of the effect description in bytes
  681. //  pDefines
  682. //      Optional NULL-terminated array of preprocessor macro definitions.
  683. //  pInclude
  684. //      Optional interface pointer to use for handling #include directives.
  685. //      If this parameter is NULL, #includes will be honored when compiling
  686. //      from file, and will error when compiling from resource or memory.
  687. //  pPool
  688. //      Pointer to ID3DXEffectPool object to use for shared parameters.
  689. //      If NULL, no parameters will be shared.
  690. //  ppCompiler
  691. //      Returns a buffer containing created effect compiler.
  692. //  ppParseErrors
  693. //      Returns a buffer containing any error messages which occurred during
  694. //      parse.  Or NULL if you do not care about the error messages.
  695. //
  696. //----------------------------------------------------------------------------
  697.  
  698. HRESULT WINAPI
  699.     D3DXCreateEffectCompilerFromFileA(
  700.         LPCSTR                          pSrcFile,
  701.         CONST D3DXMACRO*                pDefines,
  702.         LPD3DXINCLUDE                   pInclude,
  703.         DWORD                           Flags,
  704.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  705.         LPD3DXBUFFER*                   ppParseErrors);
  706.  
  707. HRESULT WINAPI
  708.     D3DXCreateEffectCompilerFromFileW(
  709.         LPCWSTR                         pSrcFile,
  710.         CONST D3DXMACRO*                pDefines,
  711.         LPD3DXINCLUDE                   pInclude,
  712.         DWORD                           Flags,
  713.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  714.         LPD3DXBUFFER*                   ppParseErrors);
  715.  
  716. #ifdef UNICODE
  717. #define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileW
  718. #else
  719. #define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileA
  720. #endif
  721.  
  722.  
  723. HRESULT WINAPI
  724.     D3DXCreateEffectCompilerFromResourceA(
  725.         HMODULE                         hSrcModule,
  726.         LPCSTR                          pSrcResource,
  727.         CONST D3DXMACRO*                pDefines,
  728.         LPD3DXINCLUDE                   pInclude,
  729.         DWORD                           Flags,
  730.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  731.         LPD3DXBUFFER*                   ppParseErrors);
  732.  
  733. HRESULT WINAPI
  734.     D3DXCreateEffectCompilerFromResourceW(
  735.         HMODULE                         hSrcModule,
  736.         LPCWSTR                         pSrcResource,
  737.         CONST D3DXMACRO*                pDefines,
  738.         LPD3DXINCLUDE                   pInclude,
  739.         DWORD                           Flags,
  740.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  741.         LPD3DXBUFFER*                   ppParseErrors);
  742.  
  743. #ifdef UNICODE
  744. #define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceW
  745. #else
  746. #define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceA
  747. #endif
  748.  
  749.  
  750. HRESULT WINAPI
  751.     D3DXCreateEffectCompiler(
  752.         LPCSTR                          pSrcData,
  753.         UINT                            SrcDataLen,
  754.         CONST D3DXMACRO*                pDefines,
  755.         LPD3DXINCLUDE                   pInclude,
  756.         DWORD                           Flags,
  757.         LPD3DXEFFECTCOMPILER*           ppCompiler,
  758.         LPD3DXBUFFER*                   ppParseErrors);
  759.  
  760. //----------------------------------------------------------------------------
  761. // D3DXDisassembleEffect:
  762. // -----------------------
  763. //
  764. // Parameters:
  765. //----------------------------------------------------------------------------
  766.  
  767. HRESULT WINAPI 
  768.     D3DXDisassembleEffect(
  769.         LPD3DXEFFECT pEffect, 
  770.         BOOL EnableColorCode, 
  771.         LPD3DXBUFFER *ppDisassembly);
  772.         
  773.  
  774.  
  775. #ifdef __cplusplus
  776. }
  777. #endif //__cplusplus
  778.  
  779. #endif //__D3DX9EFFECT_H__
  780.  
  781.  
  782.